#include <iostream>
#include <fstream>
#include <string> 
#include <vector>
#include <cmath>
#include "Data_file.h"
#include "File.h"
#include "Data.h" 

using namespace std;

static const int nb_keyword=12 ;
static const string keyword[nb_keyword]={"ANALYSIS","DATA_FILE","DEF_UNIT","DEF_NURBS_FILE","DEF_REGIME","ANALYSIS","DEF_ZONE","DEF_CL","DEF_MATERIAU","DEF_FORMULATION","DEF_OUT_FILE","DEF_SOLVER"} ;	


// Constructeur
Data_file::Data_file()
{	
}
Data_file::Data_file(string nom,string type)
{
	s_name_file=nom ;
	s_type_file=type ;
	s_path_file="";
	b_open_file =false ;	
}
//destructeur
Data_file::~Data_file()
{
}

// lisible
/*bool File::readable() 
{ 
    ifstream fichier( files.c_str() ); 
    return !fichier.fail(); 
} 
*/

void Data_file::lecture()
{
		

}


vector<string> decoupe_ligne(string ligne, string recherche)
{
	vector<string> sortie ;
	size_t found ;
	size_t found_suiv ;
	int i;

	sortie.resize(0) ;

	i=0;
	found=0;
	found_suiv=ligne.find_first_of(recherche,found) ;

	while (found_suiv != string::npos)
	{
		found_suiv=ligne.find_first_of(recherche,found+1) ;
		sortie.push_back("") ;
		sortie[i]=ligne.substr(found,found_suiv-found) ;
		found=found_suiv+1 ;
		i=i+1 ;
	}
  return sortie ;
}

string trouve_entre(string ligne, string debut, string fin)
{
	string sortie ;
	size_t found_deb ;
	size_t found_fin ;

	found_deb=0;
	found_fin=ligne.size() ;
	found_deb=ligne.find_first_of(debut,0) ;
	found_fin=ligne.find_first_of(fin,found_deb+1) ;
	sortie=ligne.substr(found_deb+debut.size(),found_fin-fin.size()) ;
	return sortie ;
}




void Data_file::prelecture(vector<string> Other_file)
{
	int j; 
	string tutu="salut c'est romains      ";
	int i,inc=0;

	if (s_type_file == "Data")
	{

		string fichier ;
		string ligne ;
		string sub_tutu ;
		vector<string> sub_ligne ;
	   Data Data_params ;
	
		fichier=s_path_file+s_name_file ;
		// Lecture ligne par ligne pour trouver un des keywords
		cout << "prelit le fichier: " << fichier << endl ;

		// essaie d'ouverture
		ifstream flux(fichier.c_str()) ;
		b_open_file=true ;

		// test si le fichier s'est bien ouvert
		if(!flux)
		{
			cout << "ERROR ouverture fichier" << endl ;
		}
		else
		{
			// cette boucle s'arrête dès qu'une erreur de lecture survient
			while (getline(flux,ligne))
			{
				//Recherche les instructions

				// Verification que c'est pas une ligne de commentaire
				if (ligne.find_first_of("#")==1)
				{
					// Ne rien faire
				}
				if (ligne.find(keyword[1]) != -1)
				{
					cout <<"ligne trouve "<<keyword[1] <<" "<< ligne << endl ;

					// Trouve entre deux string:
					ligne=trouve_entre(ligne,"{","}") ;

					// Decoupage en vecteur entre chaque espace mais supprime les espaces inutiles:
					sub_ligne=decoupe_ligne(ligne," ") ;
	
					for (j=0;j<sub_ligne.size();j++)
					{
						cout << sub_ligne[j] << endl ;
					}
				}

				// stockage des fichiers de données
				if (ligne.find(keyword[2]) != -1)
				{
					cout <<"ligne trouve "<<keyword[2] <<" "<< ligne << endl ;
					// Trouve entre deux string:
					ligne=trouve_entre(ligne," "," ") ;
					
				}
				if (ligne.find(keyword[3]) != -1)
				{
					cout <<"ligne trouve "<<keyword[3] <<" "<< ligne << endl ;
				}
				if (ligne.find(keyword[4]) != -1)
				{
					cout <<"ligne trouve "<<keyword[4] <<" "<< ligne << endl ;
				}
				if (ligne.find(keyword[5]) != -1)
				{
					cout <<"ligne trouve "<<keyword[5] <<" "<< ligne << endl ;
				}
			}
      }
		// Trouve entre deux string:
		sub_tutu=trouve_entre(tutu,"{","}") ;
		
		cout <<"Resultat "<< sub_tutu << "L" << endl ;
		
		// Decoupage en vecteur entre chaque espace mais supprime les espaces inutiles:
		sub_ligne=decoupe_ligne(sub_tutu," ") ;
	
		for (j=0;j<sub_ligne.size();j++)
		{
			cout << sub_ligne[j]<< "L" << endl ;
		}
	}
}

